package fr.unice.tinytorrent.main;

import java.io.File;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import fr.unice.tinytorrent.TinyTorrent;
import fr.unice.tinytorrent.exceptions.FileIsNotDirectory;
import fr.unice.tinytorrent.objects.ClientImpl;

public class DownloadMain {

	/**
	 * cette classe represente la partie du téléchargement
	 * Ici on a essayer de faire un jeu de téléchargement pour tester la stratégie de la maximisation des ressources
	 * 
	 */
	public static void main(String[] args) {
		try {
			
			/**
			 * Suppression de quelque morceaux chez les différents clients pour montrer que l'application peut
			 * télécharger depuis plusieurs clients à la fois
			 */
			
			new File("./tmp/tinytorrent/client1/Nothing_Else_Matters.mp3.chunk0").delete();
			new File("./tmp/tinytorrent/client1/Nothing_Else_Matters.mp3.chunk1").delete();
			new File("./tmp/tinytorrent/client1/Nothing_Else_Matters.mp3.chunk2").delete();
			new File("./tmp/tinytorrent/client1/Nothing_Else_Matters.mp3.chunk4").delete();
			new File("./tmp/tinytorrent/client1/Nothing_Else_Matters.mp3.chunk5").delete();
			new File("./tmp/tinytorrent/client1/Nothing_Else_Matters.mp3.chunk6").delete();
			new File("./tmp/tinytorrent/client2/Nothing_Else_Matters.mp3.chunk0").delete();
			new File("./tmp/tinytorrent/client2/Nothing_Else_Matters.mp3.chunk2").delete();
			new File("./tmp/tinytorrent/client2/Nothing_Else_Matters.mp3.chunk3").delete();
			new File("./tmp/tinytorrent/client2/Nothing_Else_Matters.mp3.chunk4").delete();
			new File("./tmp/tinytorrent/client2/Nothing_Else_Matters.mp3.chunk6").delete();
			new File("./tmp/tinytorrent/client3/Nothing_Else_Matters.mp3.chunk1").delete();
			new File("./tmp/tinytorrent/client3/Nothing_Else_Matters.mp3.chunk5").delete();
			new File("./tmp/tinytorrent/client3/Nothing_Else_Matters.mp3.chunk7").delete();
			new File("./tmp/tinytorrent/client3/Nothing_Else_Matters.mp3.chunk8").delete();
			
			
			// la première ressources à télécharger 
			// le tracker va se baser sur la valeur de hashage pour ce cas
			TinyTorrent t = TinyTorrent.read(new File("./tmp/tinytorrent/client2/Nothing_Else_Matters.mp3.tinytorrent"));
			
			// Enregistrement du client qui souhaite télécharger
			ClientImpl l4 = new ClientImpl(new File("./tmp/tinytorrent/client4"), "rmi://localhost:1099/Tracker");
			System.out.println("Ratio du client avant le téléchargement : "+l4.getRatio());
			System.out.println("flux partagé : "+l4.DowntoString());
			l4.download(t);
			System.out.println("Ratio du client après le téléchargement : "+l4.getRatio());
			System.out.println("flux téléchargé : "+l4.DowntoString());
			
			
			// 2 ème exemple 
			// dans ce cas le tracker vas se baser sur le nom de la ressource
			l4.download(l4.getTracker().findTorrent("Daughtry - Crashed.mp3"));
			
			
			
		} 
		catch (FileIsNotDirectory e) 			{e.printStackTrace();}
		catch (RemoteException e) 				{e.printStackTrace();} 
		catch (MalformedURLException e) 		{e.printStackTrace();}
		catch (NotBoundException e) 			{e.printStackTrace();}

	}
	
	
	
	
	
	
	
	

}
